home *** CD-ROM | disk | FTP | other *** search
/ Softdisk G-S 97 / SGDS 97.2mg / SDGS.97 / SDB97 / B / MAILIST (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1989-09-20  |  14.7 KB  |  329 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 0  REM MAILIST DECEMBER 28, 1988<CTRL-0x0a>
  2. 1  GOTO 850
  3. 2  RETURN 
  4. 3 M = 0: NORMAL : RETURN 
  5. 11  & N,P$,P%,LN%: RETURN 
  6. 24  HOME : INVERSE : VTAB 12: & C80,X$: NORMAL : RETURN 
  7. 25  INVERSE : VTAB V: & J80,X$: NORMAL 
  8. 26  FOR N = 1 TO 50: & T0,8: NEXT : RETURN 
  9. 32 X$ = "NOT ENOUGH MEMORY": GOTO 25
  10. 33  & PV% -1,1,"Enter data (ESC=Exit)"E$: RETURN 
  11. 34 X$ = "Select (ESC=Quit, RETURN=Accept, ?=Help)":M% = M% +(M% = 0): GOTO 49
  12. 35 X$ = "A-" + CHR$(LM% +64) +"=Change, ESC=Exit, RETURN=Accept":M = 0:M% = 0: GOTO 49
  13. 36 X$ = "NOT ON FILE": GOTO 25
  14. 37 X$ = "ALREADY ON FILE": GOTO 25
  15. 38 X$ = "FILE FULL": GOSUB 24: GOTO 26
  16. 39 X$ = "INVALID ENTRY": GOTO 25
  17. 44 X$ = "Select (ESC=Quit, RETURN=Accrpt)":M% = M% +(M% = 0): GOTO 49
  18. 45 X$ = "A-" + CHR$(LM% +64) +"=Change, ESC=Exit, RETURN=Accept, ?=Help":M = 0:M% = 0: GOTO 49
  19. 47 V = V% -1: & PV,1,X$":";: NORMAL : PRINT E$;
  20. 48  &  GET Z$: PRINT "":Z =  ASC(Z$):EX = Z = 27:RT = (Z = 13  AND M% = 0):HE = (Z = 63  OR Z = 47):BA = (Z = 3  AND  PEEK(49249) >127): RETURN 
  21. 49 M = M%: INVERSE : GOSUB 99: GOSUB 47: GOSUB 99: ON EX  OR HE  OR BA GOTO 3: ON Z = 13 GOTO 2:N = (Z -64) *(Z >64): ON Z <64  AND Z >21 GOTO 49: IF N  THEN M = N: RETURN 
  22. 50 M% = M +(Z = 10  OR Z = 21) -(Z = 8  OR Z = 11) *(M >0):M% = M% -LM% *(M% >LM%) +LM% *(M% <1): GOTO 49
  23. 51 M = M%: INVERSE : GOSUB 201: GOSUB 47: GOSUB 201: ON EX  OR Z = 3 GOTO 3: ON Z = 13 GOTO 2:N =  VAL(Z$):N = N *(N >0  AND N =  <LZ%): IF N  THEN M = N: RETURN 
  24. 52 M% = M +(Z = 10  OR Z = 21) -(Z = 8  OR Z = 11) *(M >0):M% = M% -LZ% *(M% >LZ%) +LZ% *(M% <1): GOTO 51
  25. 53 X$ = "UPDATING FILES": GOTO 24
  26. 55 X$ = "READING FILES": GOTO 24
  27. 61  IF  LEN(X$) <L2  THEN X$ =  LEFT$(X$ +X$,L2): GOTO 61
  28. 62  RETURN 
  29. 66  PRINT FR$: TEXT : PRINT : PRINT L$: &  FREFR%: & P1,1,"FREE MEM": PRINT FR%: VTAB 1:L = 0: FOR T = 1 TO LT:X =  LEN(T$(T)): IF X >L  THEN L = X
  30. 68  NEXT :L2 = L +4:H = (81 -L2)/2: INVERSE : & P1,H: & L"*",L2: FOR T = 1 TO LT: & HH,"*"; SPC( L +2);"*";: & C80,T$(T): NEXT : & HH: & L"*",L2: NORMAL : POKE 34,LT +2: RETURN 
  31. 70 X$(1) = "<CTRL-0x08><CTRL-0x08>" +X$:Y$(1) = Y$:LM% = 1:S% = 1:V% = LT +4: HOME :M = 0: GOSUB 72:M = 1: GOSUB 105: & L"=",79: POKE 34,V% +2: RETURN 
  32. 72  & P FN V(M),1: & L"=",79: RETURN 
  33. 83  TEXT : PRINT CL$: POKE 216,0: PRINT D$"BYE"
  34. 99  ON M <1  OR M >LM% GOTO 3: & P FN V(M),1, CHR$(64 +M)"-"X$(M): NORMAL : RETURN 
  35. 100  &  DEL P%:MX = 0: RETURN 
  36. 101  ON M <1  OR M >LM% GOTO 3:V =  FN V(M): & PV,1, CHR$(64 +M)"-"X$(M)":";: NORMAL : PRINT E$;: RETURN 
  37. 102  FOR N = 1 TO LM%:Y$(N) = "": NEXT : RETURN 
  38. 103  GOSUB 120: POKE 34,LT +2: PRINT L$:M = 0: GOSUB 72: FOR M = 1 TO LM%: GOSUB 99: NEXT : GOSUB 72: PRINT "Use Arrows or Press Letter to Select": RETURN 
  39. 104  GOSUB 120: POKE 34,LT +2: PRINT L$:M = 0: GOSUB 72: FOR M = 1 TO LM%: GOSUB 105: NEXT : GOTO 72
  40. 105  GOSUB 101: & J80,Y$(M): RETURN 
  41. 106  GOSUB 33: INVERSE : GOSUB 101:H = 80 -L2:Z$ =  LEFT$(Y$(M),L2): RETURN 
  42. 107 L2 = 1: GOSUB 106: GOSUB 154: ON EX GOTO 118: ON Z$ = "" GOTO 107:Z =  ASC(Z$):Z = Z -32 *(Z >96):Z$ =  CHR$(Z): GOTO 118
  43. 108  GOSUB 106: GOSUB 154: GOTO 118
  44. 109  GOSUB 106: GOSUB 153: GOTO 118
  45. 118 Y$(M) = Z$:Z =  VAL(Z$): GOTO 105
  46. 120 N = 21 -LT:M = 1 +(LM% +2) *2:S% = 1 +(N >M):V% = LT +2 +(N -LM% *S%)/2: RETURN 
  47. 153  GOSUB 155:Z =  VAL(Z$):Z$ =  STR$(Z): RETURN 
  48. 154  & PV,H, CHR$(0);: & IZ$,L2:EX = Z$ =  CHR$(27):HE = (Z$ = "?"  OR Z$ = "/"): ON EX GOTO 156: RETURN 
  49. 155  & PV,H, CHR$(0);: & #Z$,L2:EX = Z$ =  CHR$(27): ON EX GOTO 156: RETURN 
  50. 156 Z$ = "": RETURN 
  51. 200 LZ% = 8:S% = 1:V% = 10: PRINT L$:M = 0: GOSUB 72: FOR M = 1 TO LZ%: GOSUB 201: NEXT :M% = 0: GOTO 72
  52. 201  ON M <1  OR M >LZ% GOTO 3: & P FN V(M),1, STR$(M)"-"Z$(M): NORMAL : RETURN 
  53. 210 X =  LEN(Z$): FOR N = 1 TO X: IF  MID$ (Z$,N,1) = "?"  THEN Z$ =  MID$ (Z$,1,N -1):N = X
  54. 211  NEXT : RETURN 
  55. 220  &  NORMAL FL$: &  NORMAL LL$:Z$ = FL$: GOSUB 210:FL$ = Z$:Z$ = LL$: GOSUB 210:LL$ = Z$: ON AL$ < >"Y" GOTO 2: &  NORMAL W$(1): &  NORMAL W$(2):Z$ = W$(1): GOSUB 210:W$(1) = Z$:Z$ = W$(2): GOSUB 210:W$(2) = Z$: RETURN 
  56. 300 CF$ = "CONFIG": PRINT OD$CF$: RETURN 
  57. 301  GOSUB 300: PRINT RD$CF$: INPUT PF$: PRINT CL$CF$: RETURN 
  58. 302  GOSUB 300: PRINT WD$CF$: PRINT PF$: PRINT CL$CF$: RETURN 
  59. 330 F$ = PF$ +LS$: PRINT OD$F$",L256": RETURN 
  60. 332  PRINT RD$F$",R"0: INPUT LP,XP,MX,HP,LN,PC$,PS,LF$: & FZ$(1),4: GOTO 399
  61. 333  PRINT WD$F$",R"0: PRINT LP: PRINT XP: PRINT MX: PRINT HP: PRINT LN: PRINT PC$: PRINT PS: PRINT LF$: &  PRINT Z$(1),4: GOTO 399
  62. 334  PRINT RD$F$",R"P: & FY$(1),10: PRINT D$:IB = Y$(9) = "Y":P$(P) = Y$(PS): &  NORMAL P$(P): RETURN 
  63. 335  PRINT WD$F$",R"P: &  PRINT Y$(1),10: PRINT D$: PRINT SH$: RETURN 
  64. 336  PRINT RD$F$",R"N: & FY$(1),PS: PRINT D$:P$(N) = Y$(PS): &  NORMAL P$(N): RETURN 
  65. 339 P = P%(N%): GOSUB 334:N1% = N%: RETURN 
  66. 380  GOSUB 390: PRINT D$"BLOAD "PF$LS$".IN,A"A",L"L: RETURN 
  67. 381  GOSUB 390: PRINT D$"BSAVE "PF$LS$".IN,A"A",L"L: RETURN 
  68. 390 L = 0:A = 0 *P%(0) + PEEK(131) +256 * PEEK(132):L = ( PEEK(A -2) *256 + PEEK(A -1)) *2: RETURN 
  69. 397  PRINT CL$F$: RETURN 
  70. 399  PRINT D$"": PRINT SH$: RETURN : REM   DOS SUBS<CTRL-0x0a><CTRL-0x0a>
  71. 400  & E: GOSUB 409: ON LI = 10050 GOTO 2: ON LI = 118 GOTO 420: ON LI = 1032 GOTO 402: ON LI = 332 GOTO 410: ON LI = 7911  OR LI = 7912 GOTO 450: ON LI = 6020 GOTO 430: ON LI >299  AND LI <400 GOTO 439
  72. 401  GOTO 498
  73. 402  ON ER < >6 GOTO 405: HOME : INVERSE : VTAB 12: PRINT Z$" LIST NOT FOUND ": NORMAL : PRINT "CREATE FILES (Y/N)?";: &  GET X$: PRINT : ON X$ = "Y" GOTO 403: ON X$ = "N" GOTO 1000: GOTO 402
  74. 403 LP = 0:XP = 0:MX = 100:PC$ = "":LN = 6:HP = 1:PS = 1:LF$ = "Y": DIM P%(MX),P$(MX):LS$ = Z$
  75. 404  GOSUB 330: GOSUB 333: PRINT FL$: FOR N = 1 TO MX:P%(N) = N: NEXT : GOSUB 381: GOTO 900
  76. 405  ON ER < >16 GOTO 498: GOSUB 39: GOTO 1010
  77. 409 ER =  PEEK(222):LI =  PEEK(218) + PEEK(219) *256: RETURN 
  78. 410  PRINT CL$: POP :X$ = "BAD FILE FORMAT": GOSUB 25: GOTO 1010
  79. 420 Z = 0: GOTO 105
  80. 430 X$ = "INVALID PATH": GOSUB 25: GOTO 6005
  81. 439 X$ = "ESC=Quit, C=Continue, RETURN=Restart Program": GOSUB 499: ON EX GOTO 83: ON Z$ = "C" GOTO 2: ON Z$ = "c" GOTO 2: ON   NOT RT GOTO 439: RUN 
  82. 450  GOSUB 32: DIM P%(MX),P$(MX): POP : GOTO 7010
  83. 498 X$ = "ESC=Quit, RETURN=Restart Program": GOSUB 499: ON EX GOTO 83: ON BA GOTO 998: ON   NOT RT GOTO 498: RUN 
  84. 499 V = V% -1 +23 *(V% = 0): INVERSE : & PV,1: &  ONERR : PRINT " ERROR";: NORMAL : PRINT " - "X$":"E$;: GOTO 48
  85. 500  VTAB 12: & C80,"CHECK PRINTER ON": PRINT D$"PR# 1": PRINT  CHR$(9)"255N";PR$;: HOME : RETURN 
  86. 509  PRINT L$
  87. 510 PG = PG +1: & C80,LS$ +" PHONE LIST": & C80,Z$(PS) +" FROM " +FL$ +" TO " +LL$:L = 2
  88. 511  IF SU$ >""  THEN  & C80,"SUBLIST CODE " +SU$:L = L +1
  89. 512  IF AL$ = "Y"  THEN  & C80,Z$(AD) +" FROM " +W$(1) +" TO " +W$(2):L = L +1
  90. 519  & J80,"PAGE " + STR$(PG): PRINT :L = L +2
  91. 520  & L"=",79: PRINT "NAME";: IF LS% = 2  THEN  & H32,"ADDRESS";
  92. 521  ON LS% = 1  AND PS >1  AND PS <8 GOSUB 530: & H68,"PHONE": & L"=",79:L = L +3: RETURN 
  93. 530  & H32,Z$(PS);: RETURN 
  94. 599  PRINT D$"PR#3": PRINT : RETURN 
  95. 600 X =  LEN(SU$): FOR N = 1 TO  LEN(Y$(10)):FO = SU$ =  MID$ (Y$(10),N,X): ON FO GOTO 2: NEXT : RETURN 
  96. 700  &  NORMAL Z$: GOSUB 210:A% = 0:Z% = LP +1:X =  LEN(Z$)
  97. 702 N% = (A% +Z%)/2: ON   NOT N%  OR N% = A%  OR N% = Z% GOTO 708:N = P%(N%): IF P$(N) = ""  THEN  GOSUB 336
  98. 704 FO =  MID$ (P$(N),1,X) = Z$: ON FO GOTO 2: IF Z$ <P$(N)  THEN Z% = N%: GOTO 702
  99. 706  IF Z$ >P$(N)  THEN A% = N%: GOTO 702
  100. 708 N% = N% +1: RETURN : REM PART MATCH<CTRL-0x0a>
  101. 710  &  NORMAL Z$:A% = 0:Z% = LP +1
  102. 711 N% = (A% +Z%)/2: ON   NOT N%  OR N% = A%  OR N% = Z% GOTO 714:N = P%(N%): IF P$(N) = ""  THEN  GOSUB 336
  103. 712 FO = P$(N) = Z$: ON FO GOTO 2: IF Z$ <P$(N)  THEN Z% = N%: GOTO 711
  104. 713  IF Z$ >P$(N)  THEN A% = N%: GOTO 711
  105. 714 N% = N% +1: RETURN : REM EXACT MATCH<CTRL-0x0a>
  106. 720 X = 0: FOR N = 1 TO  LEN(Z$): IF  MID$ (Z$,N,1) = ","  THEN X = N
  107. 722  IF  MID$ (Z$,N,2) = ", "  THEN Z$ =  LEFT$(Z$,N) + MID$ (Z$,N +2): GOTO 722
  108. 724  NEXT : ON   NOT X GOTO 2:Z$ =  MID$ (Z$,X +1) +" " + LEFT$(Z$,X -1): PRINT FR$: RETURN 
  109. 730 P = P%(N%):LP = LP -1: ON N% >LP GOTO 2: FOR N = N% TO LP:P%(N) = P%(N +1): NEXT :P%(N) = P: RETURN : REM    DEL ONE<CTRL-0x0a><CTRL-0x0a><CTRL-0x0a>
  110. 740 LP = LP +1: IF LP >XP  THEN XP = LP
  111. 742  FOR N = LP TO N% +1  STEP  -1:P%(N) = P%(N -1): NEXT 
  112. 744 P%(N%) = P: RETURN : REM ADD ONE<CTRL-0x0a><CTRL-0x0a>
  113. 750 X$ = "REC #/" +Z$(PS):Y$ = "":Z$ = "": GOSUB 70
  114. 752 Y$(1) = Z$:L2 = 30: GOSUB 108: ON EX GOTO 3: &  NORMAL Z$: ON Z$ = "" GOTO 752
  115. 753  IF Z$ = "?"  THEN  FOR Q1 = 1 TO MX:Q3 = Q1:Q2 = P%(Q1) = 1:Q1 = Q1 +MX *Q2: NEXT :Z$ = "#" + STR$(Q3 -1)
  116. 754  ON  LEFT$(Z$,1) = "?"  AND  RIGHT$(Z$,1) = "?" GOTO 768: ON  LEFT$(Z$,1) = "?" GOTO 766: ON  LEFT$(Z$,1) < >"#" GOTO 763:Z =  VAL( MID$ (Z$,2)): ON Z <1  OR Z >XP GOTO 764
  117. 756 N% = 0: FOR N = 1 TO LP: IF P%(N) = Z  THEN N% = N:N = LP
  118. 758  NEXT : IF N% = 0  THEN 764
  119. 762  GOSUB 339: GOTO 2012
  120. 763  GOSUB 700: ON FO GOTO 762
  121. 764  GOSUB 36: GOTO 752
  122. 766 Z = 0:Z$ =  MID$ (Z$,2):X =  LEN(Z$): FOR N = 1 TO XP: ON P$(N) = "" GOSUB 336: IF Z$ =  RIGHT$(P$(N),X)  THEN Z = N:N = XP
  123. 767  NEXT : ON   NOT Z GOTO 764: GOTO 756
  124. 768 Z = 0:X =  LEN(Z$):Z$ =  MID$ (Z$,2,X -2): FOR N = 1 TO XP: ON P$(N) = "" GOSUB 336: &  MID$ P$(N),Z$,Z%: IF Z%  THEN Z = N:N = XP
  125. 769  NEXT : ON   NOT Z GOTO 764: GOTO 756: REM FIND RECORD<CTRL-0x0a>
  126. 770  PRINT FR$: &  FREFR%:V = V% -1: ON FR% <1000 GOTO 780:X$ = "RET=Accept, ESC=Exit, ARROWS=Move through records": GOSUB 47: ON EX  OR Z = 13 GOTO 3: ON Z = 8  OR Z = 21  OR Z = 10  OR Z = 11 GOTO 772: GOTO 770
  127. 772 N = N% +(Z = 21) -(Z = 8) +(Z = 11) -(Z = 10): IF N <1  OR N >LP  THEN  GOSUB 36: GOTO 770
  128. 774 N% = N: GOSUB 339: FOR M = 1 TO LM%: GOSUB 105: NEXT : GOSUB 2014: GOTO 770: REM UP/DOWN<CTRL-0x0a><CTRL-0x0a><CTRL-0x0a>
  129. 780 EX = 1: GOTO 32
  130. 800 LT = 4:T$(1) = "  Micro Byte List Manager  ": ON LS$ = "" GOTO 810:T$(3) = "List in memory is : " +LS$:T$(4) = LS$ +" has " + STR$(LP) +" records organized by " +Z$(PS): GOTO 66:<CTRL-0x0a>
  131. 810 T$(3) = "NO LIST IN MEMORY AT THIS TIME":LT = 3: GOTO 66
  132. 820  ON MX >0 GOSUB 100:LS$ = "":MX = 0:LP = 0:XP = 0:PC$ = "": PRINT CL$: RETURN 
  133. 850 D$ =  CHR$(4):OD$ = D$ +"OPEN":WD$ = D$ +"WRITE":RD$ = D$ +"READ":CL$ = D$ +"CLOSE":SH$ = D$ +"FLUSH":E$ =  CHR$(29):K$ =  CHR$(11):L$ =  CHR$(12):FR$ = D$ +"FRE": PRINT D$"PR#3": PRINT : ONERR  GOTO 400
  134. 851  PRINT D$"-S8.F": DEF  FN V(M) = V% +M *S%
  135. 852  PRINT L$: VTAB 10: & C80,"Micro Byte List Manager  by   E. L. Cranford, Jr.": & C80,"Copyright (c) 1989 Softdisk, Inc.": & C80,"All Rights Reserved"
  136. 853  & C80,"Published on Softdisk #97": & C80,"Subscriptions: 1-800-831-2694": & C80,"Changing this notice is illegal": VTAB 23: INVERSE : & C80,"PRESS SPACE BAR TO CONTINUE": NORMAL : FOR N = 1 TO 1E3:N = N +1E3 *( PEEK(49168) = 160): NEXT 
  137. 858  DIM T$(5),W$(10),X$(10),Y$(10),Z$(10): GOSUB 301: GOSUB 2015
  138. 859 M% = 1: GOTO 900
  139. 900 T$(2) = "Main Menu": GOSUB 800
  140. 910 LM% = 8: & D,LM%,X$(1): GOSUB 103
  141. 920  GOSUB 34: ON EX GOTO 999: ON HE GOTO 940: ON BA GOTO 998
  142. 930  ON M GOTO 1000,2000,3000,5000,6000,7000,8000,4000: GOTO 920
  143. 940 H$ = "H0": GOSUB 10000: GOTO 900
  144. 993 X$ = "NO LIST IN MEMORY":V = V% -1: GOSUB 25: GOTO 920
  145. 997  DATA Select list,Edit list,Print labels & phone lists,Catalog data volume,"Set data location (Prefix)",Set list parameters,Enter & print casual Labels,"Sort list (if error)"
  146. 998  PRINT CL$: TEXT : END 
  147. 999 X$ = "DO YOU REALY WANT TO QUIT (Y/N)?": INVERSE : GOSUB 47: ON Z$ = "Y" GOTO 83: ON Z$ < >"N" GOTO 999: GOTO 920
  148. 1000 T$(2) = "Select List": GOSUB 800
  149. 1010  GOSUB 1100: ON EX GOTO 900: ON HE GOTO 1050
  150. 1032  PRINT D$"VERIFY "PF$Z$:LS$ = Z$
  151. 1034  TEXT : PRINT L$: GOSUB 330: GOSUB 332
  152. 1040  DIM P%(MX),P$(MX): GOSUB 380:M% = 2: GOTO 900:<CTRL-0x0a>
  153. 1050 H$ = "H1": GOSUB 10000: GOTO 1000
  154. 1100 Y$ = LS$:X$ = "List name (?=Help)": GOSUB 70
  155. 1102  IF  LEFT$(PF$,1) = "/"  THEN PX$ = "": GOTO 1106
  156. 1104  PRINT  CHR$(4)"PREFIX": INPUT PX$
  157. 1106  PRINT  CHR$(4)"OPEN"PX$PF$",TDIR": PRINT  CHR$(4)"READ"PX$PF$
  158. 1108  INPUT T1$,T1$,T1$
  159. 1110  INPUT T1$
  160. 1112  IF T1$ = ""  THEN 1120
  161. 1114  IF  MID$ (T1$,73,7) < >"R=  256"  THEN 1110
  162. 1116  PRINT "|  "; MID$ (T1$,2,15)" |";"
  163. 1118  GOTO 1110
  164. 1120  PRINT  CHR$(4)"CLOSE"PX$PF$
  165. 1190 L2 = 12: GOSUB 108: ON EX GOTO 2: ON Z$ = "" GOTO 1190: GOSUB 820: &  NORMAL Z$: RETURN : REM  LIST NAME<CTRL-0x0a>
  166. 2000  ON LS$ = "" GOTO 993:T$(2) = "Edit List": GOSUB 800
  167. 2002  IF CH%  THEN  GOSUB 381:CH% = 0
  168. 2004 LM% = 3: & D,LM%,X$(1): GOSUB 103
  169. 2006  GOSUB 34: ON EX GOTO 2008: ON HE GOTO 2007: ON M GOTO 2100,2200,2300: GOTO 2006
  170. 2007 H$ = "H2": GOSUB 10000: GOTO 2000
  171. 2008 M% = 3: GOTO 900
  172. 2010  DATA Add names,Review/edit names,Delete names:<CTRL-0x0a><CTRL-0x0a>
  173. 2012 M% = 0:LM% = 10: FOR N = 1 TO LM%:X$(N) = Z$(N): NEXT : GOSUB 104
  174. 2014  INVERSE : & PV% -2,1,"RECORD # "P;: NORMAL : PRINT E$: RETURN 
  175. 2015  & D,10,Z$(1): RETURN 
  176. 2016  DATA  "Name (Last,First)",Company/Address,Address,Address,City,State,Zipcode,Phone number,"Reverse names (Field A) at comma for labels (y/n)",Sublist code(s):<CTRL-0x0a><CTRL-0x0a>
  177. 2100 T$(2) = "Add Names": GOSUB 800: IF FR% <1000  THEN  GOSUB 32: GOTO 2000
  178. 2101 N% = LP +1: IF N% >MX  THEN  GOSUB 38: GOTO 2000
  179. 2102 P = P%(N%): IF N% >XP  THEN P = N%
  180. 2103 LM% = 10: GOSUB 102:Y$(9) = LF$: GOSUB 2012
  181. 2104  FOR M = 1 TO LM%: GOSUB 2109: NEXT 
  182. 2105  ON EX GOTO 2000: GOSUB 35: ON RT GOTO 2190: GOSUB 2109: GOTO 2105:<CTRL-0x0a>
  183. 2109  ON M GOSUB 2110,2110,2110,2110,2110,2110,2160,2170,2180,2110:M = M +EX *LM%: RETURN :<CTRL-0x0a>
  184. 2110 L2 = 30: GOTO 108
  185. 2150 L2 = 2: GOTO 108
  186. 2160 L2 = 10: GOTO 108
  187. 2170 L2 = 12: GOTO 108
  188. 2180  GOSUB 107: ON EX  OR Z$ = "Y"  OR Z$ = "N" GOTO 2: GOTO 2180
  189. 2190  GOSUB 2192: GOTO 2100
  190. 2192  GOSUB 53: GOSUB 335:Z$ = Y$(PS): GOSUB 710: GOSUB 740:P$(P) = Y$(PS):CH% = 1: GOTO 333: REM ADD ONENAME<CTRL-0x0a><CTRL-0x0a>
  191. 2200 T$(2) = "Review/Change names": GOSUB 800
  192. 2202  GOSUB 750: IF EX  THEN 2000
  193. 2204  GOSUB 770: IF EX  THEN 2202
  194. 2206 M% = 0: ON EX GOTO 2200: GOSUB 35: ON RT GOTO 2208: GOSUB 2109: GOTO 2206
  195. 2208 N% = N1%: GOSUB 730: GOSUB 2192: GOTO 2200: REM CHANGE<CTRL-0x0a>
  196. 2300 T$(2) = "Delete names": GOSUB 800
  197. 2302  GOSUB 750: ON EX GOTO 2000
  198. 2304  GOSUB 770: ON EX GOTO 2302
  199. 2306  GOSUB 2310: ON EX GOTO 2302: ON Z$ < >"D" GOTO 2306
  200. 2308 CH% = 1: GOSUB 53: GOSUB 730:P$(P) = "]": FOR N = 1 TO 6:Y$(N) = "]": NEXT : GOSUB 335: GOSUB 333: GOTO 2300: REM DELETE
  201. 2310 X$ = "D=Delete, ESC=Exit ": GOTO 49:<CTRL-0x0a><CTRL-0x0a>
  202. 3000  ON LS$ = ""  OR LP = 0 GOTO 993: GOSUB 3800:T$(2) = "Print Labels & Lists": GOSUB 800:M% = 1
  203. 3001 LM% = 2:X$(1) = "Print labels":X$(2) = "Print phone lists": GOSUB 103
  204. 3002  GOSUB 34: ON EX GOTO 900: ON HE GOTO 3010: ON M GOTO 3008,3500: GOTO 3002
  205. 3008 T$(2) = "Print Labels": GOSUB 800:LM% = 2:X$(1) = "Print by record number":X$(2) = "Print by " +Z$(PS): GOSUB 103
  206. 3009  GOSUB 44: ON EX GOTO 3000: ON M GOTO 3100,3200: GOTO 3009:<CTRL-0x0a>
  207. 3010 H$ = "H3": GOSUB 10000: GOTO 3000
  208. 3100 T$(2) = "Print by Record Number": GOSUB 800: GOSUB 3114: IF EX  THEN 3008
  209. 3102  PRINT L$: FOR P = FL TO LL: GOSUB 3106: NEXT : GOTO 3100:<CTRL-0x0a>
  210. 3106  PRINT FR$: GOSUB 334: ON  LEFT$(Y$(1),1) = "]" GOTO 3112: ON SU$ = "" GOTO 3107: GOSUB 600: ON   NOT FO GOTO 3112
  211. 3107  ON AL$ = "N" GOTO 3110:X$ = Y$(AD): &  NORMAL X$: IF X$ <W$(1)  OR  LEFT$(X$, LEN(W$(2))) >W$(2)  THEN 3112
  212. 3110  FOR NN = 1 TO NL: GOSUB 3300: NEXT 
  213. 3112  RETURN :<CTRL-0x0a>
  214. 3114 Y$(1) = "1":Y$(2) =  STR$(XP):Y$(3) = "1":Y$(4) = "":Y$(5) = "N": GOSUB 3190
  215. 3120  FOR M = 1 TO LM%: GOSUB 3124:M = M +EX *LM%: NEXT 
  216. 3122  ON EX GOTO 3: GOSUB 35: ON RT GOTO 3199: GOSUB 3124: GOTO 3122
  217. 3124  ON M GOSUB 3126,3126,3128,3150,3140: RETURN 
  218. 3126 L2 = 4: GOSUB 109: ON EX GOTO 3: ON Z <1  OR Z >XP GOTO 3126: RETURN 
  219. 3128 L2 = 3: GOTO 109
  220. 3130 L2 = 25: GOSUB 108: ON EX GOTO 2: IF Z$ = ""  THEN Y$(M) =  CHR$(1)
  221. 3131  RETURN 
  222. 3132 L2 = 25: GOSUB 108: ON EX GOTO 2: IF Z$ = ""  THEN Y$(M) =  CHR$(255)
  223. 3133  RETURN 
  224. 3140  GOSUB 107: ON EX  OR Z$ = "N" GOTO 2: ON Z$ < >"Y" GOTO 3140: GOSUB 3700: GOSUB 3190: RETURN 
  225. 3150 L2 = 30: GOTO 108
  226. 3190 X$(1) = "Start at record #":X$(2) = "End at record #": GOTO 3900
  227. 3199 FL =  VAL(Y$(1)):LL =  VAL(Y$(2)): ON FL <1  OR FL >LL  OR LL >XP GOTO 3122:NL =  VAL(Y$(3)):SU$ = Y$(4):AL$ = Y$(5): GOTO 220:<CTRL-0x0a><CTRL-0x0a>
  228. 3200 T$(2) = "Print by " +Z$(PS): GOSUB 800: GOSUB 3230: IF EX  THEN 3008
  229. 3208  HOME : GOSUB 3400
  230. 3212 N% = N% +1: ON N% >LP GOTO 3200:P = P%(N%): GOSUB 334: IF  LEFT$(P$(P), LEN(LL$)) >LL$  THEN 3200
  231. 3216  GOSUB 3106: GOTO 3212:<CTRL-0x0a>
  232. 3230 LM% = 5: GOSUB 102:Y$(3) = "1":Y$(5) = "N": GOSUB 3290: GOSUB 3900: FOR M = 1 TO LM%: GOSUB 3250: NEXT 
  233. 3240  ON EX GOTO 2: GOSUB 35: ON RT GOTO 3299: GOSUB 3250: GOTO 3240
  234. 3250  ON M GOSUB 3130,3132,3128,3150,3140:M = M +EX *LM%: RETURN 
  235. 3290 X$(1) = "Start at " +Z$(PS) +" (Not less than)":X$(2) = "End at " +Z$(PS) +" (Not greater than)": RETURN :<CTRL-0x0a>
  236. 3299 FL$ = Y$(1):LL$ = Y$(2):NL =  VAL(Y$(3)):SU$ = Y$(4):AL$ = Y$(5): GOTO 220:<CTRL-0x0a>
  237. 3300  GOSUB 500:Z$ = Y$(1): IF IB  THEN  GOSUB 720
  238. 3302  & HHP,Z$:L = 1: FOR N = 2 TO 4: ON Y$(N) = "" GOTO 3304: & HHP,Y$(N):L = L +1
  239. 3304  NEXT :X$ = ",": IF Y$(5) <" "  THEN X$ = ""
  240. 3305  & HHP,Y$(5);X$" "Y$(6)" "Y$(7):L = L +1
  241. 3306  FOR N = L +1 TO LN: PRINT : NEXT : GOTO 599
  242. 3400 Z$ = FL$: GOSUB 700
  243. 3402 N% = N% -1: ON N% <1 GOTO 2:N = P%(N%): GOSUB 336: ON Z$ >P$(N) GOTO 2: GOTO 3402: REM   FIND START<CTRL-0x0a>
  244. 3500 T$(2) = "Print Phone Lists": GOSUB 800:LM% = 2:X$(1) = "Print names and phone numbers only":X$(2) = "Print names, addresses and phone numbers":M% = 1: GOSUB 103
  245. 3502  GOSUB 44: ON EX GOTO 3000: ON M GOTO 3510,3510: GOTO 3502
  246. 3510 LS% = M:T$(2) = X$(M): GOSUB 800: GOSUB 3600: ON EX GOTO 3500
  247. 3520  TEXT : PRINT L$:PG = 0: ON   NOT SP GOSUB 500: GOSUB 510: GOSUB 3400
  248. 3530 N% = N% +1: ON N% >LP GOTO 3590: ON L >54  AND SP = 0 GOSUB 509: ON  PEEK(37) >20  AND SP GOSUB 3580:P = P%(N%): GOSUB 334: IF  LEFT$(P$(P), LEN(LL$)) >LL$  THEN 3590
  249. 3532  ON SU$ = "" GOTO 3534: GOSUB 600: ON   NOT FO GOTO 3530
  250. 3534  ON AL$ = "N" GOTO 3540:X$ = Y$(AD): &  NORMAL X$: IF X$ <W$(1)  OR  LEFT$(X$, LEN(W$(2))) >W$(2)  THEN 3530
  251. 3540  ON LS% GOSUB 3550,3560: GOTO 3530
  252. 3550 N = 67 - LEN(Y$(1)): PRINT Y$(1);: ON PS >1  AND PS <8 GOSUB 3551: ON PS = 1  OR PS = 8 GOSUB 3552: & H68,Y$(8):L = L +1: RETURN 
  253. 3551  & H32,Y$(PS);: RETURN 
  254. 3552  & L".",N,: RETURN 
  255. 3560  PRINT Y$(1);: & H32,Y$(2);: & H65,Y$(8):L = L +1: FOR N = 3 TO 4: IF Y$(N) >""  THEN  & H32,Y$(N):L = L +1
  256. 3561  NEXT : & H32,Y$(5)", "Y$(6)" "Y$(7): PRINT :L = L +2: RETURN 
  257. 3580  PRINT "PRESS KEY TO CONTINUE :";: GET Z$: PRINT L$: RETURN 
  258. 3590  ON SP GOSUB 3580: PRINT L$: GOSUB 599: GOTO 3500:<CTRL-0x0a>
  259. 3600 LM% = 5: GOSUB 102:Y$(4) = "N":Y$(5) = "S": GOSUB 3690: FOR M = 1 TO LM%: GOSUB 3620: NEXT 
  260. 3610  ON EX GOTO 2: GOSUB 35: ON RT GOTO 3680: GOSUB 3620: GOTO 3610
  261. 3620  ON M GOSUB 3130,3132,3150,3640,3650:M = M +EX *LM%: RETURN 
  262. 3640  GOSUB 107: ON EX  OR Z$ = "N" GOTO 2: ON Z$ < >"Y" GOTO 3640: GOSUB 3700: GOSUB 3690:M = 4: RETURN 
  263. 3650  GOSUB 107: ON EX  OR Z$ = "P"  OR Z$ = "S" GOTO 2: GOTO 3650
  264. 3680 FL$ = Y$(1):LL$ = Y$(2):SU$ = Y$(3):AL$ = Y$(4):SP = (Y$(5) = "S"): GOTO 220:<CTRL-0x0a>
  265. 3690 LM% = 5: GOSUB 3290: & D,3,X$(3): GOTO 104: DATA Sublist code (No code = include all records),Additional limits (Y\N),Print to the screen (S) or to paper (P) 
  266. 3700  GOSUB 200
  267. 3702 X$ = "Select fielt to limit (ESC=Exit)": GOSUB 51: ON EX GOTO 2:AD = M: ON AD <1  OR AD >8 GOTO 3702
  268. 3704  & X,Y$,W$:LM% = 2:X$(1) = "Lowest " +Z$(AD):X$(2) = "Highest " +Z$(AD): GOSUB 102: GOSUB 104: FOR M = 1 TO 2: GOSUB 3706: NEXT 
  269. 3705  ON EX GOTO 3799: GOSUB 35: ON RT GOTO 3799: GOSUB 3706: GOTO 3705
  270. 3706  ON M GOSUB 3710,3710:M = M +EX *LM%: RETURN 
  271. 3710 L2 = 30: GOTO 108
  272. 3799  & X,Y$,W$: RETURN :<CTRL-0x0a>
  273. 3800 PR$ =  CHR$( VAL(PC$)):L =  LEN(PC$): FOR N = 1 TO L: ON  MID$ (PC$,N,1) = "/" GOSUB 3802: NEXT : RETURN 
  274. 3802 PR$ = PR$ + CHR$( VAL( MID$ (PC$,N +1))): RETURN : REM SET PRINTER CODE
  275. 3900 LM% = 5: & D,3,X$(3): GOTO 104: DATA Nunber of labels per record,Sublist code (No code = include all records),Additional limits (Y/N):<CTRL-0x0a>
  276. 4000  ON LS$ = "" GOTO 993:T$(2) = "Sort": GOSUB 800
  277. 4020 X$ = "READING " +Z$(PS): GOSUB 24: ON XP = 0 GOTO 900
  278. 4040  FOR N = 1 TO XP: GOSUB 336:P%(N) = N
  279. 4050  NEXT :X$ = "SORTING " +Z$(PS): GOSUB 24
  280. 4060 LN% = XP: GOSUB 11:X$ = "WRITING INDEX": GOSUB 24
  281. 4070  GOSUB 381
  282. 4080  GOTO 900:<CTRL-0x0a><CTRL-0x0a>
  283. 5000  TEXT : HOME : PRINT : PRINT D$"CATALOG "PF$",TTXT": PRINT "PRESS ANY KEY TO CONTINUE ";: GET Z$: PRINT : GOTO 900
  284. 6000 T$(2) = "Set List Location (Prefix)": GOSUB 800:X$ = "Prefix (?=Help)":Y$ = PF$: GOSUB 70
  285. 6005  GOSUB 6010: ON EX GOTO 900: ON Z$ = "" GOTO 6900: GOTO 6020
  286. 6010 L2 = 30: GOSUB 108: ON EX  OR Z$ = "" GOTO 2: ON HE GOTO 6910: IF  RIGHT$(Z$,1) < >"/"  THEN Z$ = Z$ +"/"
  287. 6011  RETURN 
  288. 6020  PRINT D$"VERIFY"Z$
  289. 6900 PF$ = Z$: GOSUB 302: GOTO 900
  290. 6910  POP :H$ = "H5": GOSUB 10000: GOTO 6000:<CTRL-0x0a>
  291. 7000  ON LS$ = "" GOTO 993:T$(2) = "List Parameters": GOSUB 800:LM% = 7: GOSUB 102: & D,LM%,X$(1):Y$(1) =  STR$(MX):Y$(2) =  STR$(HP):Y$(3) =  STR$(LN):Y$(4) = PC$:Y$(5) =  STR$(PS):Y$(6) = LF$: GOSUB 104: GOSUB 7700
  292. 7010  GOSUB 45: ON EX GOTO 900: ON HE GOTO 7020: ON RT GOTO 7900: ON M GOTO 7100,7200,7300,7400,7500,7030: ON M = 7 GOTO 7600: GOTO 7010
  293. 7020 H$ = "H6": GOSUB 10000:EX = 0: GOTO 7000
  294. 7030  GOSUB 2180: GOTO 7010
  295. 7100 L2 = 4: GOSUB 109: ON EX  OR Z =  >XP GOTO 7010: GOSUB 39: GOTO 7100
  296. 7200 L2 = 2: GOSUB 109: ON EX  OR Z >0 GOTO 7010: GOSUB 39: GOTO 7200
  297. 7300 L2 = 2: GOSUB 109: ON EX  OR Z >5 GOTO 7010: GOSUB 39: GOTO 7300
  298. 7400 L2 = 15: GOSUB 108: GOSUB 7401: ON EX  OR N >L GOTO 7010: GOSUB 39: GOTO 7300
  299. 7401 L =  LEN(Z$): FOR N = 1 TO L: ON  MID$ (Z$,N,1) <"/"  OR  MID$ (Z$,N,1) >"9" GOTO 2: NEXT : RETURN 
  300. 7500  GOSUB 200:M% = PS
  301. 7502 X$ = "Select primary sort field (ESC=Exit)": GOSUB 51: ON EX GOTO 7000: ON M >0  AND M <9 GOTO 7504: GOSUB 39: GOTO 7502
  302. 7504 Y$(5) =  STR$(M): GOSUB 104: GOSUB 7700: GOTO 7010
  303. 7600 LM% = 4:L2 = 25: FOR N = 1 TO LM%:X$(N) = "Field title":Y$(N) = Z$(N): NEXT : GOSUB 104
  304. 7610  ON EX GOTO 7000: GOSUB 35: ON RT GOTO 7690: ON M GOSUB 108,108,108,108: GOTO 7610
  305. 7690  FOR N = 1 TO 4:Z$(N) = Y$(N): NEXT : GOTO 7000
  306. 7700  & P FN V(LM% +1) +1,1,"Enter special printer codes in decimal": PRINT "values in the form : 27/31/65": RETURN 
  307. 7800  DATA Maximum number of records,Horizontal print position for labels (default=1),Number of lines per label (default=6),Special printer codes
  308. 7801  DATA Primary sort field,Default setting for Reverse names when printing (Y/N),Reassign field titles (fields A-D)
  309. 7900 PC$ = Y$(4):X =  VAL(Y$(1)): ON X < >MX GOSUB 7910: GOSUB 53:MX = X:HP =  VAL(Y$(2)):LN =  VAL(Y$(3)):X =  VAL(Y$(5)):NS = X < >PS:PS = X:LF$ = Y$(6): GOSUB 333: ON NS GOTO 4000: GOTO 900
  310. 7910  GOSUB 100: PRINT FR$: &  FREFR%:Z = FR% -14 -5 *(X +1): IF Z <1000  THEN  POP : GOSUB 32: DIM P%(MX),P$(MX): GOTO 7010
  311. 7911  DIM P%(X),P$(X): GOTO 380
  312. 8000 T$(2) = "Enter & Print Casual Labels:LT = 3: GOSUB 66: IF LN = 0 THEN LN = 6 
  313. 8002  IF HP = 0  THEN HP = 1
  314. 8010 LM% = 5: FOR N = 1 TO LM%:X$(N) = "Line " + STR$(N):Y$(N) = "": NEXT : GOSUB 104: INVERSE : PRINT "?=Help": NORMAL : FOR M = 1 TO LM%: GOSUB 8090: NEXT 
  315. 8020  ON EX GOTO 900: ON HE GOTO 8060: GOSUB 45: ON RT GOTO 8100: GOSUB 8090: GOTO 8020
  316. 8050 L2 = 30: GOTO 108
  317. 8060 H$ = "H7": GOSUB 10000: GOTO 8000
  318. 8090  ON M <1  OR M >LM% GOTO 2: GOSUB 8050:M = M +EX *LM% +LM% *HE: RETURN :<CTRL-0x0a><CTRL-0x0a>
  319. 8100 W$ = Y$(1): HOME :Y$ = "1":X$ = "Number of labels": GOSUB 70
  320. 8102 L2 = 2: GOSUB 109: ON EX GOTO 8000
  321. 8103 Y$(1) = W$: FOR M = 1 TO Z: GOSUB 8110: NEXT : GOTO 8000
  322. 8110  GOSUB 500: FOR N = 1 TO 5: & HHP,Y$(N): NEXT : FOR N = N TO LN: PRINT : NEXT : GOTO 599
  323. 10000  TEXT : DIM H$(66): GOSUB 10050:EN = 65 - PEEK(7): PRINT CL$H$:L = 0:V% = 24:M% = 0: GOSUB 10020
  324. 10010 X$ = "<<              ARROWS=NEXT/PREVIOUS PAGE, ESC=EXIT HELP               >>": INVERSE : GOSUB 47: ON EX GOTO 10060: ON Z = 11  OR Z = 21 GOSUB 10020: ON Z = 10  OR Z = 8 GOSUB 10040: GOTO 10010
  325. 10020 A = L +1: ON A >EN GOTO 2: HOME : &  PRINT H$(A),21:L = L +21: IF L =  >EN  THEN  INVERSE : & C80,"END OF HELP": NORMAL 
  326. 10030  RETURN 
  327. 10040  ON L <42 GOTO 2:L = L -42: GOTO 10020
  328. 10050  PRINT OD$H$: PRINT RD$H$: & FH$(1),66: PRINT D$: RETURN 
  329. 10060  &  DEL H$: RETURN